#pragma once
#include <string>
#include <vector>
#include <list>
#include <unordered_map>
#include <mutex>
using namespace std;

//LRU缓存类
class LRUCache{
public:
    LRUCache(int capacity = 100);
    LRUCache(const LRUCache &cache);
    LRUCache &operator=(const LRUCache &rhs);
    ~LRUCache();
    //从缓存中访问数据
    string getElement(const string &key);
    //向缓存中添加数据
    void addElement(const string &key, const string &value);
    void readFromFile(const string &filename);
    void writeToFile(const string &filename);
    //将该缓存跟新为另一个缓存
    void update(const LRUCache &rhs);
    //获取更新的缓存信息
    list<pair<string, string>> &getPendingUpdateList();
    void print();
private:
    //缓存的容量
    int _capacity = 100;
    //保存缓存的键值对
    list<pair<string, string>> _resultList;
    //等待更新的节点信息
    list<pair<string, string>> _pendingUpdateList;
    //unordered_map保存键和其对应的迭代器，以实现对list的常数时间访问
    unordered_map<string, list<pair<string, string>>::iterator> _hashMap;
};
